package pl.edu.pw.elka.jtrzasko.proz.warcaby.view;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;

import pl.edu.pw.elka.jtrzasko.proz.warcaby.controller.Server;
import pl.edu.pw.elka.jtrzasko.proz.warcaby.figures.FigureColor;
import pl.edu.pw.elka.jtrzasko.proz.warcaby.model.Position;

/**
 * Klasa towrzaca caly w widok dla serwea. Umozliwi uruchomienie serwera na konkrenym porcie, oraz jego wylaczenie.
 */
public class ServerView extends JPanel
{

	private JLabel labelServerPort;
	/**
	 * Zawiera port na ktorym naslucuhuje serwer
	 */
	private JTextField textServerPort;
	/**
	 * Tworzy nowy serwer
	 */
	private JButton buttonConnect;
	/**
	 * Przerywa prace serwera
	 */
	private JButton buttonDisconnect;

	/**
	 * Serwer glowny
	 */
	private Server server;

	/**
	 * Utworzenie nowego widoku dla serwera.
	 */
	public ServerView()
	{
		labelServerPort = new JLabel("Server Port: ");
		buttonConnect = new JButton("Start");
		buttonDisconnect = new JButton("Stop");
		buttonDisconnect.setEnabled(false);
		textServerPort = new JTextField("4444", 1);
		setLayout(null);
		
		buttonConnect.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				buttonConnect.setEnabled(false);
				textServerPort.setEnabled(false);
				startServer(textServerPort.getText());
				buttonDisconnect.setEnabled(true);
			}
		});

		buttonDisconnect.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				buttonDisconnect.setEnabled(false);
				server.disconnet();
				textServerPort.setEnabled(true);
				buttonConnect.setEnabled(true);
			}
		});
		
		labelServerPort.setBounds(35, 30, 100, 25);
		textServerPort.setBounds(160, 30, 100, 25);
		buttonConnect.setBounds(30, 100, 100, 25);
		buttonDisconnect.setBounds(160, 100, 100, 25);

		add(labelServerPort);
		add(textServerPort);
		add(buttonConnect);
		add(buttonDisconnect);
	}

	/**
	 * Uruchomienie serwera na konkrtnym porcie
	 * @param port port na ktorym ma nasluchiwac serwer
	 */
	public void startServer(String port)
	{
		try
		{
			server = new Server(Integer.valueOf(port));
		} catch (Exception e)
		{
			e.printStackTrace();
		}
		new Thread(server).start();
	}
}
